// -*- coding: us-ascii-unix -*-
// Copyright 2014 Lukas Kemmer
//
// Licensed under the Apache License, Version 2.0 (the "License"); you
// may not use this file except in compliance with the License. You
// may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
// implied. See the License for the specific language governing
// permissions and limitations under the License.

#ifndef FAINT_DUMB_PTR_HH
#define FAINT_DUMB_PTR_HH
#include <memory>

namespace faint{

template<typename T>
struct no_delete{
  void operator()(T*){}
};

// A unique_ptr which does no cleanup on destruction. Useful for e.g.
// borrowed PyObjects and widgets that will be cleaned up by wxWidgets
template<class T>
using dumb_ptr = std::unique_ptr<T, no_delete<T>>;

template<typename T, typename ...Args>
dumb_ptr<T> make_dumb(Args&& ...args){
  return dumb_ptr<T>(new T(std::forward<Args>(args)...));
}

} // namespace

#endif
